package com.hadwinling.alogriithm.arraydemo

object demo {
  def main(args: Array[String]): Unit = {
    //声明数组 z 声明一个字符串类型的数组，数组长度为 3 ，可存储 3 个元素
    var z:Array[String]  = new Array[String](3)
    //等价
    var z1 = new Array[String](3)

    fillTest()

  }

  def test(): Unit ={
    var myList = Array(1.9, 2.9, 3.4, 3.5)

    // 输出所有数组元素
    for ( x <- myList ) {
      println( x )
    }

    // 计算数组所有元素的总和
    var total = 0.0;
    for ( i <- 0 to (myList.length - 1)) {
      total += myList(i);
    }
    println("总和为 " + total);

    // 查找数组中的最大元素
    var max = myList(0);
    for ( i <- 1 to (myList.length - 1) ) {
      if (myList(i) > max) max = myList(i);
    }
    println("最大值为 " + max);
  }

  //多维数组
  def ofDimTest(): Unit ={
    val myMatrix = Array.ofDim[Int](3, 4)

    // 创建矩阵
    for (i <- 0 to 2) {
      for ( j <- 0 to 2) {
        myMatrix(i)(j) = j;
      }
    }

    // 打印二维阵列
    for (i <- 0 to 2) {
      for ( j <- 0 to 2) {
        print(" " + myMatrix(i)(j));
      }
      println();
    }
  }

  //合并数组
  def concatTest()={
    var myList1 = Array(1.9, 2.9, 3.4, 3.5)
    var myList2 = Array(8.9, 7.9, 0.4, 1.5)

    var myList3 =  Array.concat( myList1, myList2)

    // 输出所有数组元素
    for ( x <- myList3 ) {
      println( x )
    }
  }

  //创建区间数组
  //range() 方法来生成一个区间范围内的数组。range() 方法最后一个参数为步长，默认为 1：
  def rangeTest(): Unit ={
    var myList1 = Array.range(10, 20, 2)
    var myList2 = Array.range(10,20)

    // 输出所有数组元素
    for ( x <- myList1 ) {
      print( " " + x )
    }
    println()
    for ( x <- myList2 ) {
      print( " " + x )
    }
  }


  def fillTest(): Unit ={
    //返回数组，长度为第一个参数指定，同时每个元素使用第二个参数进行填充。
    var array1 = Array.fill(10)(0.1)
    //返回二数组，长度为第一个参数指定，同时每个元素使用第二个参数进行填充。
    val array = Array.fill(2, 3)(0.5)


    for (i <- 0 to array1.length-1){
      print(i +" ")
    }
    println()
    for ( i  <-0 to array.length-1){
      for (j <- 0 to array(i).length-1) {
        print(array(i)(j) +" ")
      }
      println()
    }


  }

}
